package com.monitor.service.factory;

import com.monitor.model.MonitorConfig;
import com.monitor.model.ServerConfig;
import com.monitor.service.monitor.IServerMonitor;
import com.monitor.service.monitor.LinuxServerMonitorImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 服务器监控器工厂
 * 工厂模式：创建不同类型的服务器监控器
 */
public class ServerMonitorFactory {
    private static final Logger logger = LoggerFactory.getLogger(ServerMonitorFactory.class);
    
    /**
     * 根据服务器类型创建对应的监控器
     * @param serverConfig 服务器配置
     * @param monitorConfig 监控配置
     * @return 服务器监控器实例
     */
    public static IServerMonitor createMonitor(ServerConfig serverConfig, MonitorConfig monitorConfig) {
        // 根据服务器配置中的操作系统类型字段来决定创建哪种类型的监控器
        // 注意：需要在servers.json中的服务器配置中添加"osType"字段，如：
        // {
        //   "id": "server1",
        //   "name": "应用服务器",
        //   ...
        //   "osType": "linux"
        // }
        
        String osType = serverConfig.getOsType();
        logger.info("创建{}类型的服务器监控器: {}", osType, serverConfig.getName());
        
        if ("windows".equalsIgnoreCase(osType)) {
            // 如果需要支持Windows，可以在这里返回WindowsServerMonitorImpl的实例
            logger.warn("Windows服务器监控暂未实现，使用默认Linux监控 [{}]", serverConfig.getName());
        } else if (!"linux".equalsIgnoreCase(osType)) {
            logger.warn("未知操作系统类型: {}，使用默认Linux监控 [{}]", osType, serverConfig.getName());
        }
        
        // 目前只实现了Linux服务器监控，其他类型的监控器可以在此处扩展
        return new LinuxServerMonitorImpl(serverConfig, monitorConfig);
    }
} 